#include "ZCssStyle.h"
#include "ZFileUtils.h"

namespace ZuiLib
{


ZCssStyle* ZCssStyle::s_global = NULL;

ZCssStyle::ZCssStyle()
{

}

ZCssStyle::~ZCssStyle()
{

}

ZCssStyle* ZCssStyle::GetGlobal()
{
	if (!s_global)
	{
		s_global = new ZCssStyle();
	}
	return s_global;
}

bool ZCssStyle::loadFromFile(const char* filepath)
{
	ZRefCountedPtr<ZFileData> data = ZFileUtils::Instance()->GetFileData(filepath);
	if (data) {
		return m_cssSheet.Parse((char*)data->data());
	} else {
		return false;
	}
}

bool ZCssStyle::loadFromString(const char* strXml)
{
	if (strXml) {
		return m_cssSheet.Parse(strXml);
	} else {
		return false;
	}
}


std::shared_ptr<CssStyles> ZCssStyle::GetStylesByClass(const css_string& key) {
	auto cls = m_cssSheet.GetStylesByClass(key);
	if (!cls && GetGlobal() != this) {
		cls = GetGlobal()->GetStylesByClass(key);
	}
	return cls;
}

std::shared_ptr<CssStyles> ZCssStyle::GetStylesById(const css_string& key) {
	auto cls = m_cssSheet.GetStylesById(key);
	if (!cls && GetGlobal() != this) {
		cls = GetGlobal()->GetStylesById(key);
	}
	return cls;
}

std::shared_ptr<CssStyles> ZCssStyle::GetStylesByElement(const css_string& key) {
	auto cls = m_cssSheet.GetStylesByElement(key);
	if (!cls && GetGlobal() != this) {
		cls = GetGlobal()->GetStylesByElement(key);
	}
	return cls;
}


}//namespace

